package minix.pages;

import java.util.ArrayList;
import java.util.List;

import minix.components.NominerNyttMedlem;
import minix.entities.Bilde;
import minix.entities.Profil;

import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.springframework.security.core.context.SecurityContextHolder;

/**
 * Start page of application pasienlosjen_web.
 */
public class NominerteMedlemmer {
	@Property
	private Profil profil;
	@Property
	private Profil nominertAvProfil;

	@Property
	private List<Profil> profiler;
	@Inject
	private Logger logger;
	@Property
	private Bilde bilde;
	@Inject
	private Session session;
	@Component
	private NominerNyttMedlem nominerNyttMedlem;

	@Log
	@CommitAfter
	Object onAction(Long id) {
		Profil denneBrukerensProfil = hentProfilenTilInloggetBruker();
		Profil denNominertesProfil = (Profil) session.get(Profil.class, id);
		denNominertesProfil.leggTilNominertAv(denneBrukerensProfil);
		session.merge(denNominertesProfil);
		return true;
	}

	@SuppressWarnings("unchecked")
	void onActivate() {
		nominerNyttMedlem.setNyProfil(new Profil());
		nominerNyttMedlem.setProfilenTilBrukerenSomNominerer(hentProfilenTilInloggetBruker());
		profiler = new ArrayList<Profil>();
		Criteria createCriteria = session.createCriteria(Profil.class);
		createCriteria.add(Restrictions.eq("nominert", true));
		createCriteria.add(Restrictions.eq("medlem", false));
		profiler = createCriteria.list();
	}

	private Profil hentProfilenTilInloggetBruker() {
		String brukernavn = SecurityContextHolder.getContext().getAuthentication().getName();
		Profil tmpProfil = (Profil) session.createCriteria(Profil.class).add(Restrictions.eq("brukernavn", brukernavn))
				.uniqueResult();
		return tmpProfil;
	}

	public boolean getKanNominere() {
		return profil.getNominertAv().contains(profil);
	}

	public boolean getBrukerHarProfil() {
		if (hentProfilenTilInloggetBruker() == null)
			return false;
		return true;
	}
}
